package leetcode.dp;

import java.util.List;

/**
 给你一个字符串 s 和一个字符串列表 wordDict 作为字典。请你判断是否可以利用字典中出现的单词拼接出 s 。

 注意：不要求字典中出现的单词全部都使用，并且字典中的单词可以重复使用

 输入: s = "leetcode", wordDict = ["leet", "code"]
 输出: true
 解释: 返回 true 因为 "leetcode" 可以由 "leet" 和 "code" 拼接成。

 */
public class WordBreak139 {
    public boolean wordBreak(String s, List<String> wordDict) {
        //dp[i] 表示第i个字符结尾的子串是否可行。
        boolean []dp = new boolean[s.length()+1];

        dp[0] = true;
        for (int i = 1; i <=s.length(); i++) {
            for (String word : wordDict) {
                int wordLength = word.length();
                //当前位置可以拆分一个
                if(i>=wordLength && s.substring(i-wordLength,i).equals(word)){
                    dp[i] = dp[i] || dp[i-wordLength];
                }
            }
        }
        return dp[s.length()];
    }
}